#include <pvm3.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

// fonction qui incremente un chaine de caracteres entre 'a' et 'z' 
// au sens de l'ordre lexicographique
int add (char* in)
{
  //char* in = malloc(size*sizeof(char));
  //  strcpy(in,str);
  int size = strlen(in);
  if(size == 0)return 0;  
int j;
  int i=size-1;
  int notz=size-1;
  // on cherche la lettre la plus à droite qui n'est pas un 'z'
  while(i>=0)
    {
      if(in[i]=='z')
	{
	  notz--;
	  i--;
	}
      else break;
    }
  // toutes lettres à droite deviennent des 'a'
  for(j=(notz+1);j<size;j++)
    {
      in[j]='a';
    }
  if(notz>=0)// on incrémente cette lettre si elle existe
    {
      in[notz]++;
    }
  else// sinon on ajoute un 'a' a la chaine
    {
      for(j=size;j>0;j++)
	{
	  in[j]=in[j-1];
	}
      in[0]='a';
    }
  return 0;
}



int main(int argc, char* argv[])
{
  int my_tid = pvm_mytid();
  int master_tid = pvm_parent();
  int size_max = atoi(argv[2]);  
  pvm_initsend(PvmDataDefault);
  char *send_buf = malloc(3*size_max*sizeof(char));
  char *recv_buf = malloc(3*size_max*sizeof(char));
  //pvm_pkint(&my_tid,1,0);
  //pvm_send(master_tid,0);  


  char* mdp = malloc(size_max*sizeof(char));
  strcpy(mdp,argv[1]);

  char* tmp = malloc(size_max*sizeof(char));
  char* sup = malloc(size_max*sizeof(char));
  
  //while(1){  
  pvm_recv(master_tid,-1);
  pvm_upkstr(recv_buf);
  strcpy(tmp,strtok(recv_buf," "));
  strcpy(sup,strtok(NULL,"\0"));
  
  //
  //
  
  while(strcmp(tmp, sup)!=0)
    {
      if(strcmp(mdp,tmp)==0)
	{
	  pvm_pkstr(tmp);
	  pvm_send(master_tid,2);
	  return EXIT_SUCCESS;
	}
      add(tmp);     
    }
  pvm_pkstr(tmp);
  pvm_send(master_tid,1);    
  return EXIT_SUCCESS;
  
  
}
